package com.fyt.algorithm.interview;



import java.util.*;

public class IpJumpNum {
    public static void main(String[] args) {

        //输入读取和ip映射
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        Map<String,Integer> ipToId=new HashMap<>();
        for (int i = 0; i <n ; i++) {
            String ip=sc.next();
            int  id=sc.nextInt();
            ipToId.put(ip,id);
        }
     //构建图
        List<Integer> [] graph=new List[n+1]; //序号从1开始
        //new list
        for (int i = 1; i <=n ; i++) {
            graph[i]=new ArrayList<>();
        }

        for (int i = 0; i <m ; i++) {
            int a=sc.nextInt();
            int b=sc.nextInt();
            graph[a].add(b);
            graph[b].add(a);

        }
     //逐个判断给出的id
        int q=sc.nextInt();
        sc.nextLine();
        for (int i = 0; i <q ; i++) {
            String str=sc.nextLine();
            String []parts=  str.split(" ");
            int start=ipToId.get(parts[0]);
            int end=ipToId.get(parts[1]);
            System.out.println(bfs(graph,start,end,n));

        }



    }
    //广度优先遍历,即按层遍历
    public static int bfs( List<Integer> [] graph,int start,int end,int n){
        Queue<Integer> queue=new LinkedList<>();
        Queue<Integer> depth=new LinkedList<>();
       queue.add(start);
       depth.add(0);

       boolean[] visited=new boolean[n+1];
       visited[start]=true;
       while (!queue.isEmpty()){
           int cur=queue.poll();
           int dep=depth.poll();
             for(Integer a:graph[cur]){
                 if(!visited[a]){
                     if(a==end){
                         return dep+1;
                     }
                     visited[a]=true;
                     queue.add(a);
                     depth.add(dep+1);
                 }


             }

       }
        return -1;
    }
}
